如何自学一门中间件
1.去官网找文档,guide/reference/api,文档通读一遍,搞清楚是什么?
2.不要去看源码,而是先demo一遍,知道流程和步骤,抽象模型,核心组件,运作原理.搞清楚为什么工具能达到目的?
3.场景是什么?结合场景和demo练习几次,想想是怎么回事?如何做到的?
4.越是低版本越是接近底层原理,越是接近底层就越能弄明白,其他API无非就是各语言的扩展.比如掌握了命令行,其他语言API就不用记
class1 es安装,配置
1.图形化工具 elastic search head,kibana
class2 es的基本概念
集群,节点
索引,类型,文档,分片,映射
关系型数据库(mysql) | 面向文档elasticsearch |
---|---|
database | indices |
tables | types |
rows | documents |
dolumns | fields |
逻辑设计:
一个索引类型中,包含多个文档,当我们索引一篇文档时,可以通过这样的规则: 索引>类型>文档id,通过这个组合我们能索引到具体的文档.
索引
文档
文档包含字段和值,可以层级包含字段和值,JSON格式.
字段类型
类型是包含文档的上级节点,类型中对字段的定义是映射
==倒排索引??==
class3 ik分词器详解
安装分词器插件 :
ik_smart 最细粒度划分 / ik_max_word 穷尽词库可能
elastic search analysis ik
安装kibana
查看分词器效果
1 | kibana |
自定义分词器插件
自己加字典,如何自己加字典?
添加字典:xxx.dic
修改到: ${es_plugins}/ik/config/IkAnalyzer.cfg.xml
class4 rest 分格的API
数据类型
添加文档字段时,可以指定也可以不指定数据类型
字符串类型
text,keyword
数值类型
long,integer,short,byte,double,float,half_float
日期类型
date
boolean类型
boolean
二进制类型
binary
1 | 建立索引的数据结构存储规则 |
索引的操作API
http method | name | url | param |
---|---|---|---|
put | 创建一个索引,添加规则 | http://127.0.0.1:9200/{index} | json body |
get | 查看所有索引 | http://127.0.0.1:9200/_cat/indices?v | |
get | _cat/xxx | ||
get | -cluster/xxx | ||
get | 查看单个索引 | http://127.0.0.1:9200/{index} | |
delete | 删除一个索引 | http://127.0.0.1:9200/{index} | |
post | 创建一个默认文档 | http://127.0.0.1:9200/{index}/_doc | |
get | 查看默认文档 | http://127.0.0.1:9200/{index}/_doc/{doc_id} | |
put | 修改默认文档[不建议] 覆盖式 | http://127.0.0.1:9200/{index}/_doc/{doc_id} | |
post | 修改默认文档[单字段修改] | http://127.0.0.1:9200/{index}/_doc/{doc_id}/__update | |
delete | 删除默认文档 | http://127.0.0.1:9200/{index}/_doc/{doc_id} |
文档的操作API
映射操作API
ttp method | name | url | param |
---|---|---|---|
put | 添加映射 | http://127.0.0.1:9200/{index}/_mapping | |
get | 查看映射 | http://127.0.0.1:9200/{index}/_mapping | |
put | 索引映射关联 | http://127.0.0.1:9200/{index}/{type}/{doc_id}/__update |
分词器类型
java rest client API
集成思路:
一.java rest sdk就是运用java httpclient把原始的命令行工具封装到request/response/client框架内,每个命令一组request/response,这是一个典型的http restful请求java框架. jar名称:elasticsearch-rest-high-level-client.jar,核心操作对象:TransportClient.java/RestHighLevelClient.java
二.要想跟spring集成,就是把对象实例托管到Context中,spring有spring-data.jar抽象,为elasticsearch提供具体的实现:spring-data-elasticsearch.jar, 核心操作对象:ElasticsearchRestTemplate.java
三.为了能实现自动化配置,用户无需做对象实例化,跟springboot集成autoconfigure模块,springboot把elasticsearch集成到了autoconfigure中,jar名称:spring-boot-starter-data-elasticsearch.jar,核心操作对象没变,只需要在application.yml中配置es的连接信息,就能直接使用elasticsearchRestTemplate.java
class5 springboot集成es
1 | 自动配置包: |
class6 京东爬虫入库es,全文检索
爬虫
1.写爬虫,根据京东搜索关键字的url去加载查询结果,放到list中.
2.将搜索到结果加入到es的文档库.输入关键字,返回添加是否成功.
3.获取这些数据实现搜索功能,关键字,分页,返回列表.
/条件搜索/ searchRequest SearchSourceBuilder
/分页 sourcebuilder.from(); size()
/精准匹配 TermQueryBuilder sourcebuilder.query(tempquerybuilder); sourcebuilder.timeout
//高亮关键字
/执行搜索
searchRequest.source(sourcebuilder);
client.search(request,requestOptions.default); //SearchResponse
//解析结果
SearchResponse.getHits().getHits().getSourceAsMap();//Map<String,Object>
搜索高亮
高亮关键字/执行搜索/解析结果 //将原来字段替换为高亮的字段
举一反三
要做搜索,只需要把MySQL的数据加入到es,实现搜索全文高亮就行.
FAQ
1.服务启动后es连接失败
java.net.ConnectException: Connection refused
原因:client的jar包版本与server的版本不匹配导致连接失败.client是7.x 而我的服务是6.x
2.批量添加报错:
nested exception is org.elasticsearch.action.ActionRequestValidationException: Validation Failed: 1: type is missing;2: type is missing;3: type is missing;4: type is missing;5: type is missing;6: type is missing;7: type is missing
原因:6.x版本的es,插入索引需要 指定type,7.x之后就不需要了,这是版本差异.
index/type/doc_id
小结
1.es的发展历史
2.es的文件结构
3.安装es
4.生态圈,logstash,kibana
5.分词器ik,自定义分词器
6.restful API操作
7.javaAPI操作
8.springboot集成elasticsearch
9.爬虫爬取jd的关键字搜索
10.模拟全文检索
爬虫->加入es库->搜索es库返回list->高亮显示返回关键字
参考资料